<div class="tmd-doc">
<p></p>
<h1 class="tmd-header-1">
Go (Fundamentals) 101 Update History
</h1>
<p></p>
<h3 class="tmd-header-3">
v1.23.a (2024/Oct/16)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add a <a href="function.html#range">Range Over Functions</a> section.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.22.a (2024/Mar/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.22 introduced <code class="tmd-code-span">for range Integer</code> loops and changed the semantics of for-loop code blocks. Related articles are modified accordingly:
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="control-flows.html#for-semantic-change">Basic Control Flows</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="control-flows-more.html#argument-evaluation-moment">Goroutines, Deferred Function Calls and Panic/Recover</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="container.html#iteration">Arrays, Slices and Maps in Go</a>
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.21.a (2023/Oct/11)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.21 <a href="container.html#clear">added a <code class="tmd-code-span">clear</code> builtin function</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
Since Go 1.21, <a href="panic-and-recover-use-cases.html#avoid-verbose">the call <code class="tmd-code-span">panic(nil)</code> will produce a new non-nil runtime panic</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.20.a (2023/Feb/01)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.20 <a href="container.html#slice-to-array">started to support slice to array conversions</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.20 <a href="unsafe.html">added three new functions in the "unsafe" package</a>: <code class="tmd-code-span">SliceData</code>, <code class="tmd-code-span">String</code>, and <code class="tmd-code-span">StringData</code>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
Since Go 1.20, the global random generator in the <code class="tmd-code-span">math/rand</code> package will be auto seeded.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
mention that <code class="tmd-code-span">-gcflags="-d=ssa/check_bce"</code> doesn't work for some generic functions in the <a href="bounds-check-elimination.html">Bounds Check Elimination</a> chapter.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.19.a (2022/Aug/29)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.19 <a href="concurrent-atomic-operation.html">added some atomic types</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.19 <a href="memory-model.html#atomic">updated memory order guarantees</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.18.a (2022/Apr/06)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.18 added custom generics support. Several articles in Go 101 are adjusted accordingly, mainly including
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="interface.html">Interfaces in Go</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="type-system-overview.html">Go Type System Overview</a> (note that the "named type" terminology was added back).
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
v1.17.b (2021/Sep/10)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
improve implicit method value evaluation explanations. Read <a href="method.html#method-value-Normalization">this</a> and <a href="type-embedding.html#method-value-evaluation">this</a> for details.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.16.b (2021/May/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add Go 1.17 contents
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.16.a (2021/Feb/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
support Go 1.16 embedding feature.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.15.b (2020/Oct/09)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
describe more about <a href="details.html#reflect-deep-equal">reflect.DeepEqual</a> related details.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="exceptions.html#code-block-following-else">a new syntax exception</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.15.a (2020/Aug/07)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
point out that, since Go Toolchain 1.15, using make+copy to clone slices is always more efficient than using append to clone.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.14.g (2020/Jun/12)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove the new detail added in 1.14.e: The behavior of comparing struct values with both comparable and incomparable fields or array values with both comparable and incomparable elements is unspecified. The reason is <a href="https://github.com/golang/go/issues/8606">the behavior will be specified</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="details.html#impossible-to-interface-assertion">a new detail</a>: About the impossible to-interface assertions which can be detected at compile time.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.14.f (2020/Jun/02)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
All "Go SDK" uses are changed to "Go Toolchain".
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.14.e (2020/May/06)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="details.html#compare-values-with-both-comparable-and-incomparable-parts">a new detail</a>: The behavior of comparing struct values with both comparable and incomparable fields or array values with both comparable and incomparable elements is unspecified.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="details.html#blank-fields-are-ignored-in-comparisons">a new detail</a>: In struct value comparisons, blank fields will be ignored.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.14.d (2020/Apr/25)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
<code class="tmd-code-span">runtime.KeepAlive</code> related concents are removed from <a href="unsafe.html">Unsafe Pointers</a> article. I'm sorry for spreading some wrong information in this article before.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.i (2019/Oct/31)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
fix a bug in the example code in the <a href="container.html#delete-slice-elements">Delete a segment of slice elements</a> section of the "Arrays, Slices and Maps in Go" article.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
correct explainations in <a href="function.html#function-evaluation-time">The Evaluation Moment of Deferred Function Values</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
the article "The Right Places to Call the Built-in <code class="tmd-code-span">recover</code> Function" is <a href="panic-and-recover-more.html">renamed to</a> "Explain Panic/Recover Mechanism in Detail". It was almost wholly re-written.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.h (2019/Oct/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
correct the explanations for the <a href="evaluation-orders.html#value-assignment">Evaluation and Assignment Orders in Assignment Statements</a> section in the "Expression Evaluation Orders" article.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="101.html#compiler-optimizations">two new summaries</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.e (2019/Oct/07)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
I decided to withdraw the last erratum in 1.13.d. (Re-added in 1.14.d)
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.d (2019/Sep/30)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add <a href="unsafe.html#fact-value-address-might-change">a new fact</a> to the "type-unsafe pointers" article and pointed out <a href="unsafe.html#pattern-convert-to-uintptr-and-back">a serious mistake</a> was made in this article.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.c (2019/Sep/25)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove the section containing a stupid code mistake from the "The Right Places to Call the recover Function" article.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.b (2019/Sep/19)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove the inaccurate description "the address of a variable will never change"
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.13.a (2019/Sep/05)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.13 ready.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add two situations in the article <a href="channel-closing.html">How to Gracefully Close Channels</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="type-system-overview.html#unnamed-type">the "named type" and "unnamed type" terminologies</a> are added back, but they are eqivalent to "defined type" and "non-defined type" now.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.12.d (2019/May/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
enrich the <a href="evaluation-orders.html#package-level-variables">Package-level Variables Initialization Order</a> section.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.12.c (2019/April/09)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove the "named type" and "unnamed type" terminology.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
adjust some discriptions in <a href="type-embedding.html">Type Embdding</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.12.b (2019/April/06)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add a <a href="evaluation-orders.html#package-level-variables">Package-level Variables Initialization Order</a> section.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.12.a (2019/March/02)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
Go 1.12 ready.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.f (2019/Jan/02)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove "Unused Variables" from <a href="exceptions.html">Syntax/Semantics Exceptions In Go</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.g (2018/Dec/27)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
a serious mistake was just fixed in this book. Before, the book said the starting index in a subslice syntax can't be larger than the length of the base slice. This is wrong. Please read <a href="container.html#subslice">the corrected section</a> again for details.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.f (2018/Nov/09)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
rearrange <a href="details.html">Go Details 101</a>, more details are added.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.e (2018/Oct/26)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="evaluation-orders.html">Evaluation Orders</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
modify some descriptions for <a href="packages-and-imports.html#initialization-order">program resource initialization order</a>
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.d (2018/Oct/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
remove "Comparing Interface Values" from <a href="exceptions.html">Syntax/Semantics Exceptions In Go</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add "Comparisons 2" to <a href="exceptions.html">Syntax/Semantics Exceptions In Go</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
modify some descriptions for
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="value-conversions-assignments-and-comparisons.html#comparison-rules">comparison rules</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
<a href="packages-and-imports.html#package">package hierarchy</a>
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.c (2018/Sep/22)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
add a new tip <a href="tips.html#make-struct-type-uncomparable">How to make a struct type incomparable?</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add a new tip <a href="tips.html#reset-pointers-for-dead-elements">Try to reset pointers in freed-up slice elements</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
add a new tip <a href="tips.html#make-using-of-bce">Make optimizations by using BCE</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
remove "Precedences Of Unary Operators" from <a href="exceptions.html">Syntax/Semantics Exceptions In Go</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.b (2018/Sep/09)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="tips.html">Go Tips 101</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.11.a (2018/Sep/01)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
mention 1.11 new <code class="tmd-code-span">wasm</code> GOARCH in <a href="more.html#cross-platform-compiling">More Go Related Knowledges</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
mention 1.11 new <code class="tmd-code-span">go mod</code> command in <a href="go-toolchain.html">The Go Toolchain</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.g (2018/Jun/02)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="101-about.html">About Go 101</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="acknowledgements.html">Acknowledgments</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.f (2018/May/15)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="reflection.html">Relections in Go</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a channel use case: <a href="channel-use-cases.html#rate-limiting">rate limiting</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.e (2018/Apr/28)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
added a new detail: <a href="details.html#os-exit-runtime-goexit">Exit a program with a <code class="tmd-code-span">os.Exit</code> function call and exit a goroutine with a <code class="tmd-code-span">runtime.Goexit</code> function call.</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.d (2018/Apr/18)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
added a new detail: <a href="details.html#non-exported-names-from-different-packages">Non-exported method names and struct field names from different packages are viewed as diffferent names.</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#error-declared-not-used">What does the compiler error message <code class="tmd-code-span">declared and not used</code> mean?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#time-sleep-after">What is the difference between the function call <code class="tmd-code-span">time.Sleep(d)</code> and the channel receive operation <code class="tmd-code-span">&lt;-time.After(d)</code>?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#math-crypto-rand">What is the difference between the random numbers produced by the <code class="tmd-code-span">math/rand</code> standard package and the <code class="tmd-code-span">crypto/rand</code> standard package?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#fmt-print-println">What are the differences between the <code class="tmd-code-span">fmt.Print</code> and <code class="tmd-code-span">fmt.Println</code> functions?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#print-builtin-fmt-log">What are the differences between the built-in <code class="tmd-code-span">print</code>/<code class="tmd-code-span">println</code> functions and the corresponding print functions in the <code class="tmd-code-span">fmt</code> and <code class="tmd-code-span">log</code> standard packages?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#math-round">Why isn't there a <code class="tmd-code-span">math.Round</code> function?</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
added a FAQ question: <a href="unofficial-faq.html#gopher">What does the word <span class="tmd-bold"><span class="tmd-italic">gopher</span></span> mean in Go community?</a>
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.c (2018/Apr/14)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
finished the article <a href="concurrent-common-mistakes.html">some common concurrent programming mistakes</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
published <a href="details.html">Go details 101</a>.
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
unhid <a href="unofficial-faq.html">Go FAQ 101</a>.
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.b (2018/Apr/06)
</h3>
<p></p>
<ul class="tmd-list">
<li class="tmd-list-item">
<div class="tmd-usual">
added <a href="type-embedding.html#dead-loop-example">an interesting type embedding example</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
mentioned <a href="channel.html#assign-and-compare">receive-only channels can't be closed</a>
</div>
</li>
<li class="tmd-list-item">
<div class="tmd-usual">
mentioned <a href="container.html#value-literals">indexes in array and slice composite literals must be constants</a>
</div>
</li>
</ul>
<p></p>
<h3 class="tmd-header-3">
1.10.a (2018/Mar/31)
</h3>
<p></p>
<div class="tmd-usual">
First release, though some articles are still not finished.
</div>
<p></p>
</div>
